package com.kamistoat.meimeimall.common.exception;

import org.springframework.validation.beanvalidation.SpringValidatorAdapter;

/**
 * 1、错误码定义为5位数字。
 * 2、前两位表示业务场景，最后三位表示错误样式。例如：11001，用11表示商品系业务，001表示数据校验错误。
 * 10：通用
 * 000：未知错误
 * 001：参数格式校验异常
 * 002：60秒内申请验证码
 * 11: 商品
 * 12：订单
 * 13：购物车
 * 14：库存
 * 15：用户
 * 16：搜索
 * 17：秒杀
 * 18:第三方
 * 19:支付系统
 */
public enum BizCodeEnum {
    /**
     * 通用型异常
     */
    UNKNOW_EXCEPTION(10000, "系统未知异常"),
    VALID_EXCEPTION(10001, "数据校验异常"),
    BLOCKED_BY_SENTINEL(10003, "限流，重定向至限流页"),
    SINGLE_USER_LIMITED(10004, "当前操作只允许单登录实例进行"),
    RPC_ERROR(10005, "RPC调用出错"),
    UNDO_CLEAR_CACHE(10006, "增删改业务出错，不要清除缓存"),
    NEED_LOGIN(10007, "您需要登录才能继续操作"),
    /**
     * 分库分表异常
     */
    SHARDING_ANNOTATION_ERROR(10100, "@Shardind注解校验错误。必填项为空"),
    SHARDING_DATABASES_NULL(10101, "开启了@Shardind注解，但未配置数据源"),
    SHARDING_PARAM_WITHOUT_ALLY(10102, "使用@Sharding注解时，必须使用@Param为输入参数设置别名"),
    /**
     * product模块
     */
    PRODUCT_UP_EXCEPTION(11001, "spu上架异常"),
    PRODUCT_DOWN_EXCEPTION(11002, "spu下架异常"),
    SAVE_SPU_BOUNDS_ERROR(11003, "保存Spu积分失败"),
    SAVE_SKU_REDUCTION_ERROR(11004, "保存Sku满减失败"),
    CATEGORY_ID_BANNED(11005, "当前请求不允许对该分类执行"),
    /**
     * order模块
     */
    ORDER_RECONFIRM_ERROR(12001, "订单校验失败，您的购物车发生了更改"),
    BACK_TO_CART(12002, "异常，重定向至购物车"),
    CONSTRUCT_CHECK_FAIL(12003, "构建订单检查页失败"),
    PAY_FUNC_LOCKED(12004, "由于您频繁进行异常支付行为，您的账号已被锁定支付功能3分钟，超时未解锁请联系管理员处理"),
    PAY_UNPAY_ERROR(12005, "您提交的支付订单参数无效，该订单可能已被关闭或者完成支付。请勿持续攻击该接口，否则可能导致您的账号被封禁"),
    ORDER_MODIFY_LOCKED(12006, "该订单正处于修改核心信息状态，无法完成动作。请刷新该页面后重试"),
    ORDER_NOT_BELONG_MEMBER(12007, "无法从指定用户下查询到指定订单"),
    ORDER_CLOSE_ERROR(12008, "取消待支付订单失败"),
    INVALID_ORDER_UNIQUE_TOKEN(12009, "防重令牌失效"),
    /**
     * cart模块
     */
    REFRESH_ITEM_ERROR(13001, "更新商品最新状态失败，复用旧数据"),
    /**
     * ware模块
     */
    NO_STOCK_EXCEPTION(15001, "商品库存不足"),
    /**
     * member模块
     */
    PHONENUM_EXIST_EXCEPTION(15001, "该手机号已经被注册"),
    LOGIN_ERROR_NOT_EXIST(15002, "该用户名不存在"),
    LOGIN_ERROR_WRONG_PASSWORD(15003, "登录密码错误"),
    ERROR_OLD_PASSWORD(15006, "请输入正确的原始密码，若忘记请点击忘记密码"),
    RECEIVE_ADDRESS_NOT_EXIST(15007, "不存在该收货地址"),
    INVALID_PHONE_NUM(15008, "无效手机号码"),
    USERNAME_EXIST_EXCEPTION(15009, "用户名已经存在"),
    FORBID_UPDATE_SELECT_MEMBER(15010, "您无权修改该用户"),
    /**
     * search模块
     */
    ES_INDEX_EXCEPTION(16001, "向ES添加/删除索引时发生异常"),
    ES_SEARCH_EXCEPTION(16002, "从ES查询时发生异常"),
    /**
     * 秒杀模块
     */
    SECKILL_CLOSED(17001, "该秒杀活动已经结束"),
    SECKILL_VERIFY_NOT_PRODUCT(17002, "秒杀活动参数校验失败: 该商品不在当前秒杀活动中，请严格从秒杀商品详情页进入秒杀活动"),
    SECKILL_VERIFY_NOT_BEGIN(17003, "秒杀活动参数校验失败： 该秒杀活动尚未开始，请严格从秒杀商品详情页进入秒杀活动"),
    SECKILL_VERIFY_NOT_TOKEN(17004, "秒杀活动参数校验失败： 您提交了错误的商品秘钥，请严格从秒杀商品详情页进入秒杀活动"),
    SECKILL_VERIFY_TOTAL_OVER(17005, "秒杀活动参数校验失败： 单次购买该商品的数量超出限额"),
    SECKILL_VERIFY_SELF_OVER(17006, "秒杀活动参数校验失败： 您购买此商品的数量已达到限额，请减少购买数量"),
    SECKILL_VERIFY_NO_SEMAPHORE(17007, "秒杀活动参数校验失败： 该商品已无库存"),
    SECKILL_SEARCH_FAIL(17008, "秒杀活动查询失败"),
    SECKILL_ADD_SAME_SESSION(17009, "存在相同时间段的秒杀活动"),
    FORBID_UPDATE_CURRENT_SESSION(17010, "禁止修改正在进行的秒杀活动"),
    PRODUCT_NOT_SAME_SESSION(17011, "不允许一次为多个秒杀活动添加商品"),
    /**
     * 第三方
     */
    INVALID_MSG_CODE(18001, "短信验证码已过期"),
    ERROR_MSG_CODE(18002, "短信验证码不正确，验证失败"),
    SMS_REPEAT_EXCEPTION(18003, "不允许在60秒内重复申请发送验证码"),
    /**
     * 支付
     */
    ERROR_RECONCILIATION_STARTEND_TIME(19001, "对账任务起止时间不符合规定。起止时间必须为0点，且起始日期不大于终止日期"),
    NO_PAYMENT_RECORD(19002, "对账任务创建失败，该对账任务时间段内无交易记录"),
    RECONCILIATION_START_ERROR(19003, "对账任务启动失败，该任务可能已经处于执行中或已经被删除"),
    CREATE_BILL_TABLE_ERROR(19004, "清洗第三方账单数据失败，无法创建表"),
    READ_BILL_CSV_ERROR(19005, "清洗第三方账单数据失败，读取第三方账单失败"),
    FLUSH_BILL_TO_MYSQL_ERROR(19006, "清洗第三方账单数据失败，数据刷到MYSQL异常"),
    CREATE_PAYMENT_BILL_JOIN_TABLE_ERROR(19007, "对账失败，无法创建本地交易-第三方订单关联大表"),
    JOIN_PAYMENT_BILL_DATA_ERROR(19008, "对账失败，无法关联本地交易-第三方订单关联大表"),
    RECONCILIATION_THREAD_EXECUTE_ERROR(19009, "对账失败，执行关联数据核对的线程执行失败"),
    RECONCILIATION_FINISH_BUT_UPDATE_ERROR(19010, "对账成功，但是更新任务状态时失败"),
    ERROR_TABLE_CREATE_FAIL(19011, "对账失败，错误数据表创建失败"),

    TTT(19001, "对账任务起止时间不符合规定。起止时间必须为0点，终止时间必须为24点，且起止日期不大于终止日期");



    private int code;
    private String message;

    BizCodeEnum(int code, String message) {
        this.code = code;
        this.message = message;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}
